package org.jeecg.modules.zdh.controller;

import cn.hutool.core.date.DateUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.auth.COSCredentials;
import com.qcloud.cos.http.HttpProtocol;
import com.qcloud.cos.region.Region;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.until.Sm4Util;
import org.jeecg.modules.zdh.entity.Chry;
import org.jeecg.modules.zdh.entity.Lstz;
import org.jeecg.modules.zdh.service.IChryService;
import org.jeecg.modules.zdh.service.ILstzService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;
import java.util.List;

@Slf4j
@Api(tags="参会人员")
@RestController
@RequestMapping("/Jpush")
public class JPushController {
    //签名头
    private static String  Authorization = "Basic ZDgwYzEyNWFjOTdkYTE2OTJmZjA3YWI3OjZhOWZhMzNkZGFiZGJiYWM2ZWNkMTY0ZA==";

    @Autowired
    private IChryService chryService;
    @Autowired
    private ILstzService lstzService;

    @GetMapping(value = "/JpushSendCode")
    public String JpushSendCode(String phone) {
        JSONObject json = JSONUtil.createObj()
                .set("mobile",phone)
                .set("sign_id","26675")
                .set("temp_id","1");
        String jsonStr = JSONUtil.toJsonStr(json);
        String url = "https://api.sms.jpush.cn/v1/codes";
        String result2 = HttpRequest.post(url)
                .header("content-type","application/json")//头信息，多个头信息多次调用此方法即可
                .header("Authorization",Authorization)//头信息，多个头信息多次调用此方法即可
                .body(jsonStr)
                .timeout(20000)//超时，毫秒
                .execute().body();
        return result2;
    }
//	 {"msg_id":"497834082441216"}
//	 https://api.sms.jpush.cn/v1/codes/{msg_id}/valid

    @GetMapping(value = "/JpushVerifyCode")
    public String JpushVerifyCode(String msg_id,String code) {
        JSONObject json = JSONUtil.createObj()
                .set("code",code);
        String jsonStr = JSONUtil.toJsonStr(json);
        String url = "https://api.sms.jpush.cn/v1/codes/"+msg_id+"/valid";
        String result2 = HttpRequest.post(url)
                .header("content-type","application/json")//头信息，多个头信息多次调用此方法即可
                .header("Authorization",Authorization)//头信息，多个头信息多次调用此方法即可
                .body(jsonStr)
                .timeout(20000)//超时，毫秒
                .execute().body();
        return result2;
    }

    //发送临时通知
    @GetMapping(value = "/sendLstz")
    public Result<?> sendLstz(String faburen,String tznr,String huiyi,String hylx) {
        QueryWrapper<Chry> queryWrapper = new QueryWrapper<Chry>();
        queryWrapper.eq(huiyi,1);
        List<Chry> chryList = chryService.list(queryWrapper);

        JSONArray array =  JSONUtil.createArray();

        for (Chry chry: chryList) {
            JSONObject obj = JSONUtil.createObj()
            .set("mobile",Sm4Util.SM4decrypt(chry.get手机号()))
            .set("temp_para",JSONUtil.createObj().set("tznr",Sm4Util.SM4decrypt(tznr)));
            array.add(obj);
        }
        JSONObject json = JSONUtil.createObj()
                .set("recipients",array)
                .set("sign_id","26675")
                .set("temp_id","225581");
        String jsonStr = JSONUtil.toJsonStr(json);
        String url = "https://api.sms.jpush.cn/v1/messages/batch";
        String result2 = HttpRequest.post(url)
                .header("content-type","application/json")//头信息，多个头信息多次调用此方法即可
                .header("Authorization",Authorization)//头信息，多个头信息多次调用此方法即可
                .body(jsonStr)
                .timeout(20000)//超时，毫秒
                .execute().body();
       // return result2;
        Lstz lstz = new Lstz();
        String dateStr = DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss");
        lstz.set通知人(faburen);
        lstz.set通知时间(dateStr);
        lstz.set通知内容(tznr);
        lstz.set会议类型(hylx);
        lstzService.save(lstz);
        return Result.OK("添加成功");
    }

/*       public void ss(){
           // 调用 COS 接口之前必须保证本进程存在一个 COSClient 实例，如果没有则创建
// 详细代码参见本页：简单操作 -> 创建 COSClient
           COSClient cosClient = createCOSClient();

// 存储桶的命名格式为 BucketName-APPID，此处填写的存储桶名称必须为此格式
           String bucketName = "2023zdh-1254157271";
// 对象键(Key)是对象在存储桶中的唯一标识。详情请参见 [对象键](https://www.tencentcloud.com/document/product/436/13324)
           String key = "exampleobject";

// 设置签名过期时间(可选), 若未进行设置则默认使用 ClientConfig 中的签名过期时间(1小时)
// 这里设置签名在半个小时后过期
           Date expirationDate = new Date(System.currentTimeMillis() + 30 * 60 * 1000);

// 填写本次请求的参数，需与实际请求相同，能够防止用户篡改此签名的 HTTP 请求的参数
           Map<String, String> params = new HashMap<String, String>();
           params.put("param1", "value1");

// 填写本次请求的头部，需与实际请求相同，能够防止用户篡改此签名的 HTTP 请求的头部
           Map<String, String> headers = new HashMap<String, String>();
           headers.put("header1", "value1");

// 请求的 HTTP 方法，上传请求用 PUT，下载请求用 GET，删除请求用 DELETE
           HttpMethodName method = HttpMethodName.GET;

           URL url = cosClient.generatePresignedUrl(bucketName, key, expirationDate, method, headers, params);
           System.out.println(url.toString());

// 确认本进程不再使用 cosClient 实例之后，关闭之
           cosClient.shutdown();

       }*/

    // 创建 COSClient 实例，这个实例用来后续调用请求
    COSClient createCOSClient() {
        // 设置用户身份信息。
        // SECRETID 和 SECRETKEY 请登录访问管理控制台 https://console.tencentcloud.com/cam/capi 进行查看和管理
        String secretId = System.getenv("AKIDXwKkz60yufOzWAyhFZpsnW1bJ9xgJlCh");//用户的 SecretId，建议使用子账号密钥，授权遵循最小权限指引，降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1
        String secretKey = System.getenv("Sgks9KeokSC92nQuPsQxR0UowtgKqEVd");//用户的 SecretKey，建议使用子账号密钥，授权遵循最小权限指引，降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1
        COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);

        // ClientConfig 中包含了后续请求 COS 的客户端设置：
        ClientConfig clientConfig = new ClientConfig();

        // 设置 bucket 的地域
        // COS_REGION 请参见 https://www.tencentcloud.com/document/product/436/6224?from_cn_redirect=1
        clientConfig.setRegion(new Region("https://2023zdh-1254157271.cos.ap-nanjing.myqcloud.com"));

        // 设置请求协议, http 或者 https
        // 5.6.53 及更低的版本，建议设置使用 https 协议
        // 5.6.54 及更高版本，默认使用了 https
        clientConfig.setHttpProtocol(HttpProtocol.https);

        // 以下的设置，是可选的：

        // 设置 socket 读取超时，默认 30s
        clientConfig.setSocketTimeout(30*1000);
        // 设置建立连接超时，默认 30s
        clientConfig.setConnectionTimeout(30*1000);

        // 如果需要的话，设置 http 代理，ip 以及 port
        clientConfig.setHttpProxyIp("httpProxyIp");
        clientConfig.setHttpProxyPort(80);

        // 生成 cos 客户端。
        return new COSClient(cred, clientConfig);
    }


}
